# -*- coding:utf-8 -*-

# @Time    : 2023/5/13 02:24
# @Author  : zengwenjia
# @Email   : zengwenjia@lingxi.ai
# @File    : user_info_extract.py
# @Software: LLM_internal

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
from bot.insurance_consultant_axinsur.agent.llm_agent import LLMAgent

sale_sop = """
节点编号|节点名称|节点目标
---|---|---
1|收到短信|告知用户已经给他发送了一条短信，并询问用户是否收到短信，如果用户表示收到短信必须进行节点3的销售流程中，用户表示没有收到短信必须进行节点4的销售流程，如果还是无法判断进行那个节点，就直接进行节点4
2|产品详情|引导用户打开短信链接，并询问是否看到网页信息，如果用户看到网页信息，直接进行节点9，如果用户表示自己没有看到需多次确认
3|打开微信|告知用户之前给他的权益现在帮他升级了成了百万医疗短险需要他现在购买，带她去微信上查看购买百万医疗短险，指导用户打开微信
4|找到位置|用户打开微信后,第二步,要引导用户找到微信中如何添加公众号,用户拒绝需要劝服
5|公众号|用户找到如何添加公众号后,第三步,要引导用户在微信中搜索【星火保】并关注【星火保】公众号，用户说“好的”、“嗯”代表用户已经关注了公众号，用户拒绝需要劝服
6|看到按键|用户看到公众号后,第四步,指导用户看到【星火保】公众号中的指定按键,用户拒绝需要劝服
8|手机号|用户看到指定按键后,第五步,告知需要用户输入自己的手机号,用户拒绝需要劝服
9|保障内容|询问用户是否看到【泰康600万】字样的页面，如果用户表示没有看到，需要再次确认。
10|确认费用|需要与用户确认费用是不是几块钱，用户表示看不见/没找到需要再次确认费用
11|协助投保|需要指导用户按照页面提示操作支付，用户表示看不懂/没反应/你再说怎么操作等情况，需要多次协助用户操作。
12|支付成功|询问用户是否完成支付，用户如果没有明确表示自己已经完成了支付，需要再次确认用户是否已经完成了支付。
13|升级成功|指导用户点击【升级至600万保障】按键，用户没有明确表示已经点击已经点击按键，需要再次指导，直到用户点击按键。
14|加保拖单|告知用户家人也可以买这个保险，无论用户说什么直接进行节点15
15|二次确认|再次告知用户家人也可以买这个保险，无论用户说什么直接进行节点16
16|挂机|完成销售流程，用户未成年，用户表示自己以及家人都买了百万医疗短险
"""

default_template = """
作为一个专业的保险销售员，业务场景是通过电话销售百万医疗保险，你需要根据对话记录选择销售流程下一步的销售流程节点名称。

销售流程如下表格：
{sale_sop}

对话记录如下：
```
{conversation_history}
```
请注意:
1.销售流程节点按照表格从上到下执行,同时也要注意节点目标是否完成,在不引起用户反感的情况下,要节点目标达成后再进行下一个节点
2.根据保险销售员其他的话术一步一步确认销售流程的节点,但是需要忽略掉用户提出的问题,同时也忽略掉保险销售员对用户问题的解答
3.你的目的是完成销售,忽略用户的负向反馈,继续走销售流程
保险销售员的下一句的销售流程节点名称(仅选择销售流程表格中的一个节点名称)是:
"""
# 3.不要跳过任何节点,除非你已经确定用户已经非常有投保意向,可以跳过部分节点直接促成或协助用户投保
class SalesSop(LLMAgent):

    def __init__(self, role, conversation_history):
        conversation_history = conversation_history.replace("保险规划师", "保险销售员")
        self.prompt = default_template.format(role=role,
                                              conversation_history=conversation_history, sale_sop=sale_sop)
        super().__init__(self.prompt)
